from contextlib import asynccontextmanager
from fastapi import FastAPI

from app.database import db_manager
from app.redis_client import redis_client
from app.config import settings
from app.utils.logging import get_logger, setup_logging

# 获取日志记录器
logger = get_logger(__name__)

@asynccontextmanager
async def lifespan(app: FastAPI):
    """
    应用程序生命周期管理
    在应用启动时初始化数据库和Redis连接，关闭时清理资源
    """
    # 启动时执行
    logger.info("应用程序启动中", extra={"app_name": settings.app_name, "debug_mode": settings.debug})

    try:
        # 初始化数据库连接
        await db_manager.init_db()
        logger.info("数据库连接初始化成功")

        # 初始化Redis连接
        await redis_client.init_redis()
        logger.info("Redis连接初始化成功")

        logger.info("应用程序启动完成")

    except Exception as e:
        logger.error(f"应用程序启动失败: {str(e)}")
        raise

    yield

    # 关闭时执行
    logger.info("应用程序关闭中")
    
    # 关闭Redis连接
    await redis_client.close()
    logger.info("Redis连接已关闭")
    
    # 关闭数据库连接
    await db_manager.close()
    logger.info("数据库连接已关闭")
    
    logger.info("应用程序已关闭")
